// license-header java merge-point
/**
 * This is only generated once! It will never be overwritten.
 * You can (and have to!) safely modify it by hand.
 */
package edu.uoc.tfc.dbmodel;

import org.apache.commons.lang.StringUtils;


/**
 * @see edu.uoc.tfc.dbmodel.Part
 */
public class PartDaoImpl
    extends edu.uoc.tfc.dbmodel.PartDaoBase
{
    /**
     * @see edu.uoc.tfc.dbmodel.PartDao#toPartVO(edu.uoc.tfc.dbmodel.Part, edu.uoc.tfc.dto.PartVO)
     */
    public void toPartVO(
        edu.uoc.tfc.dbmodel.Part source,
        edu.uoc.tfc.dto.PartVO target)
    {
        super.toPartVO(source, target);
    }


    /**
     * @see edu.uoc.tfc.dbmodel.PartDao#toPartVO(edu.uoc.tfc.dbmodel.Part)
     */
    public edu.uoc.tfc.dto.PartVO toPartVO(final edu.uoc.tfc.dbmodel.Part entity)
    {
        return super.toPartVO(entity);
    }


    /**
     * Retrieves the entity object that is associated with the specified value object
     * from the object store. If no such entity object exists in the object store,
     * a new, blank entity is created
     */
    private edu.uoc.tfc.dbmodel.Part loadPartFromPartVO(edu.uoc.tfc.dto.PartVO partVO)
    {
        edu.uoc.tfc.dbmodel.Part part = this.load(Long.valueOf(partVO.getId()));
        if (part == null)
        {
            part = edu.uoc.tfc.dbmodel.Part.Factory.newInstance();
        }
        return part;
    }

    
    /**
     * @see edu.uoc.tfc.dbmodel.PartDao#partVOToEntity(edu.uoc.tfc.dto.PartVO)
     */
    public edu.uoc.tfc.dbmodel.Part partVOToEntity(edu.uoc.tfc.dto.PartVO partVO)
    {
        edu.uoc.tfc.dbmodel.Part entity = this.loadPartFromPartVO(partVO);
        
        TipusSiniestre tipus = (TipusSiniestre)this.getHibernateTemplate().find
        		("FROM edu.uoc.tfc.dbmodel.TipusSiniestre WHERE id = " + 
        				partVO.getTipusSinistre().getId().toString()).get(0);
        entity.setTipusSinistre(tipus);

        Asseguradora asseguradora = (Asseguradora)this.getHibernateTemplate().find
        		("FROM edu.uoc.tfc.dbmodel.Asseguradora WHERE id = " + 
        				partVO.getAsseguradora().getId().toString()).get(0);
        entity.setAsseguradora(asseguradora);

        Client client = (Client)this.getHibernateTemplate().find
        		("FROM edu.uoc.tfc.dbmodel.Client WHERE id = " + 
        				partVO.getClient().getId().toString()).get(0);
        entity.setClient(client);

        this.partVOToEntity(partVO, entity, true);
        return entity;
    }


    /**
     * @see edu.uoc.tfc.dbmodel.PartDao#partVOToEntity(edu.uoc.tfc.dto.PartVO, edu.uoc.tfc.dbmodel.Part)
     */
    public void partVOToEntity(
        edu.uoc.tfc.dto.PartVO source,
        edu.uoc.tfc.dbmodel.Part target,
        boolean copyIfNull)
    {
        super.partVOToEntity(source, target, copyIfNull);
    }

    /**
     * @see edu.uoc.tfc.dbmodel.PartDao#findPartsByCriteria(edu.uoc.tfc.dto.CriteriaPartVO)
     */
    public java.util.Collection findPartsByCriteria(edu.uoc.tfc.dto.CriteriaPartVO criteria)
    {
        return this.findPartsByCriteria(TRANSFORM_NONE, criteria);
    }

    /**
     * @see edu.uoc.tfc.dbmodel.PartDao#findPartsByCriteria(int, edu.uoc.tfc.dto.CriteriaPartVO)
     */
    public java.util.Collection findPartsByCriteria(final int transform, final edu.uoc.tfc.dto.CriteriaPartVO criteria)
    {
        return this.findPartsByCriteria(transform, -1, -1, criteria);
    }

    /**
     * @see edu.uoc.tfc.dbmodel.PartDao#findPartsByCriteria(int, java.lang.String, int, int, edu.uoc.tfc.dto.CriteriaPartVO)
     */
    public java.util.Collection findPartsByCriteria(final int transform, final int pageNumber, final int pageSize, final edu.uoc.tfc.dto.CriteriaPartVO criteria)
    {
        try
        {
            edu.uoc.tfc.CriteriaSearch criteriaSearch = new edu.uoc.tfc.CriteriaSearch(super.getSession(false), edu.uoc.tfc.dbmodel.PartImpl.class);
            criteriaSearch.getConfiguration().setFirstResult(criteria.getFirstResult());
            criteriaSearch.getConfiguration().setFetchSize(criteria.getFetchSize());
            criteriaSearch.getConfiguration().setMaximumResultSize(criteria.getMaximumResultSize());
            if (pageNumber > 0 && pageSize > 0)
            {
                criteriaSearch.getConfiguration().setFirstResult(new java.lang.Integer(calculateFirstResult(pageNumber, pageSize)));
                criteriaSearch.getConfiguration().setMaximumResultSize(new java.lang.Integer(pageSize));
            }
            edu.uoc.tfc.CriteriaSearchParameter parameter1 =
                new edu.uoc.tfc.CriteriaSearchParameter(
                    criteria.getCodiPart(),
                    "codiPart");
            criteriaSearch.addParameter(parameter1);
            edu.uoc.tfc.CriteriaSearchParameter parameter2 =
                new edu.uoc.tfc.CriteriaSearchParameter(
                    criteria.getDataSinistre(),
                    "dataSinistre");
            criteriaSearch.addParameter(parameter2);
            edu.uoc.tfc.CriteriaSearchParameter parameter3 =
                new edu.uoc.tfc.CriteriaSearchParameter(
                    criteria.getObert(),
                    "obert");
            criteriaSearch.addParameter(parameter3);
                               
            if(StringUtils.isNotEmpty(criteria.getTipusSinistre())){
	            edu.uoc.tfc.CriteriaSearchParameter parameter4 =
	            		new edu.uoc.tfc.CriteriaSearchParameter(
	                    	getHibernateTemplate().find
	                		("FROM edu.uoc.tfc.dbmodel.TipusSiniestre WHERE id = " + 
	                				criteria.getTipusSinistre()).get(0),
	                    			"tipusSinistre");
	                criteriaSearch.addParameter(parameter4);	            
            }

            
            if(StringUtils.isNotEmpty(criteria.getAsseguradora())){
	            edu.uoc.tfc.CriteriaSearchParameter parameter5 =
	                new edu.uoc.tfc.CriteriaSearchParameter(
	                	getHibernateTemplate().find
	            		("FROM edu.uoc.tfc.dbmodel.Asseguradora WHERE id = " + 
	            				criteria.getAsseguradora()).get(0),
	                			"asseguradora");
	            criteriaSearch.addParameter(parameter5);
            }
            
            if(StringUtils.isNotEmpty(criteria.getClient())){
	            edu.uoc.tfc.CriteriaSearchParameter parameter6 =
	                new edu.uoc.tfc.CriteriaSearchParameter(
	                	getHibernateTemplate().find
	            		("FROM edu.uoc.tfc.dbmodel.Client WHERE id = " + 
	            				criteria.getClient()).get(0),
	                			"client");
	            criteriaSearch.addParameter(parameter6);
            }
            
            
            java.util.List results = criteriaSearch.executeAsList();
            transformEntities(transform, results);
            return results;
        }
        catch (org.hibernate.HibernateException ex)
        {
            throw super.convertHibernateAccessException(ex);
        }
    }
    
}